
dojo.provide("dojo.gfx.color.hsv");dojo.require("dojo.lang.array");dojo.require("dojo.math");dojo.lang.extend(dojo.gfx.color.Color,{toHsv:function(){return dojo.gfx.color.rgb2hsv(this.toRgb());}});dojo.gfx.color.rgb2hsv=function(r,g,b,options){if(dojo.lang.isArray(r)){if(g){options=g;}
b=r[2]||0;g=r[1]||0;r=r[0]||0;}
var opt={inputRange:(options&&options.inputRange)?options.inputRange:255,outputRange:(options&&options.outputRange)?options.outputRange:[255,255,255]};var h=null;var s=null;var v=null;switch(opt.inputRange){case 1:r=(r*255);g=(g*255);b=(b*255);break;case 100:r=(r/100)*255;g=(g/100)*255;b=(b/100)*255;break;default:break;}
var min=Math.min(r,g,b);v=Math.max(r,g,b);var delta=v-min;s=(v==0)?0:delta/v;if(s==0){h=0;}else{if(r==v){h=60*(g-b)/delta;}else{if(g==v){h=120+60*(b-r)/delta;}else{if(b==v){h=240+60*(r-g)/delta;}}}
if(h<=0){h+=360;}}
switch(opt.outputRange[0]){case 360:break;case 100:h=(h/360)*100;break;case 1:h=(h/360);break;default:h=(h/360)*255;break;}
switch(opt.outputRange[1]){case 100:s=s*100;case 1:break;default:s=s*255;break;}
switch(opt.outputRange[2]){case 100:v=(v/255)*100;break;case 1:v=(v/255);break;default:break;}
h=dojo.math.round(h);s=dojo.math.round(s);v=dojo.math.round(v);return[h,s,v];};dojo.gfx.color.hsv2rgb=function(h,s,v,options){if(dojo.lang.isArray(h)){if(s){options=s;}
v=h[2]||0;s=h[1]||0;h=h[0]||0;}
var opt={inputRange:(options&&options.inputRange)?options.inputRange:[255,255,255],outputRange:(options&&options.outputRange)?options.outputRange:255};switch(opt.inputRange[0]){case 1:h=h*360;break;case 100:h=(h/100)*360;break;case 360:h=h;break;default:h=(h/255)*360;}
if(h==360){h=0;}
switch(opt.inputRange[1]){case 100:s/=100;break;case 255:s/=255;}
switch(opt.inputRange[2]){case 100:v/=100;break;case 255:v/=255;}
var r=null;var g=null;var b=null;if(s==0){r=v;g=v;b=v;}else{var hTemp=h/60;var i=Math.floor(hTemp);var f=hTemp-i;var p=v*(1-s);var q=v*(1-(s*f));var t=v*(1-(s*(1-f)));switch(i){case 0:r=v;g=t;b=p;break;case 1:r=q;g=v;b=p;break;case 2:r=p;g=v;b=t;break;case 3:r=p;g=q;b=v;break;case 4:r=t;g=p;b=v;break;case 5:r=v;g=p;b=q;break;}}
switch(opt.outputRange){case 1:r=dojo.math.round(r,2);g=dojo.math.round(g,2);b=dojo.math.round(b,2);break;case 100:r=Math.round(r*100);g=Math.round(g*100);b=Math.round(b*100);break;default:r=Math.round(r*255);g=Math.round(g*255);b=Math.round(b*255);}
return[r,g,b];};